//package com.lepu.app.fun.chat.core;
//
//
//import android.os.Bundle;
//import android.os.Handler;
//import android.os.Message;
//import android.util.Log;
//
//import com.app.application.MyApplication;
//import com.app.utils.Const;
//import com.app.utils.LoginUtil;
//import com.app.utils.Setting;
//import com.core.lib.utils.main.LogUtilBase;
//import com.lepu.app.fun.chat.bean.HeaderEntity;
//import com.lepu.app.fun.chat.bean.MutiRoomEntity;
//
//import org.jivesoftware.smack.PacketListener;
//import org.jivesoftware.smack.SmackException;
//import org.jivesoftware.smack.XMPPConnection;
//import org.jivesoftware.smack.XMPPException;
//import org.jivesoftware.smack.packet.Packet;
//import org.jivesoftware.smack.packet.PacketExtension;
//import org.jivesoftware.smack.packet.Presence;
//import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
//import org.jivesoftware.smackx.disco.packet.DiscoverItems;
//import org.jivesoftware.smackx.muc.HostedRoom;
//import org.jivesoftware.smackx.muc.MultiUserChat;
//import org.jivesoftware.smackx.muc.ParticipantStatusListener;
//import org.jivesoftware.smackx.muc.RoomInfo;
//import org.jivesoftware.smackx.vcardtemp.packet.VCard;
//import org.json.JSONException;
//import org.json.JSONObject;
//
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//import java.util.UUID;
//
///**
// * Created by Administrator on 2015/10/23.
// * 聊天室
// */
//public class XmppMutiRoomManager {
//    private static final String TAG = XmppMutiRoomManager.class.getSimpleName();
//
//    static class XmppMutiRoomManagerHolder {
//        static XmppMutiRoomManager xmppUserManager = new XmppMutiRoomManager();
//    }
//
//    public static XmppMutiRoomManager getInstance() {
//        return XmppMutiRoomManagerHolder.xmppUserManager;
//    }
//
//    /**
//     * 得到 链接
//     *
//     * @return
//     */
//    public XMPPConnection getXmppConnext() {
//        XMPPConnection connection = ClientChatXmppImpl.getInstance().getConnection();
//
//        if (connection != null && connection.isConnected()) {
//            return ClientChatXmppImpl.getInstance().getConnection();
//        }
//        return null;
//    }
//
//    /**
//     * 初始化聊服务会议列表
//     */
//    public List<MutiRoomEntity> initHostRoom() {
//        Collection<HostedRoom> hostrooms;
//        XMPPConnection connection = getXmppConnext();
//        if (connection == null) {
//            return null;
//        }
//        try {
//            hostrooms = MultiUserChat.getHostedRooms(getXmppConnext(), Setting.CHAT_SERVICE_HOST);
////           hostrooms = MultiUserChat.getHostedRooms(getXmppConnext(), "192.168.22.114");
//            for (HostedRoom entry : hostrooms) {
//                if (entry.getJid().equals(Const.MUTIROOMNAME)) {
//                    return init(entry.getJid());
//                } else {
//                    continue;
//                }
//            }
//        } catch (XMPPException e) {
//            e.printStackTrace();
//        } catch (SmackException.NotConnectedException e) {
//            e.printStackTrace();
//        } catch (SmackException.NoResponseException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 离开聊天室
//     *
//     * @param jid
//     */
//    public void leaveMucRoom(String jid) {
//        /**
//         * <presence id="BPFK3-33"
//         * type="unavailable" from="12713@127.0.0.1/tm51"
//         * to="dddeee@conference.127.0.0.1/12713"><leave/> </presence>
//         */
//        XMPPConnection connection = getXmppConnext();
//        if (connection == null) {
//            LogUtilBase.LogD(TAG, "connect is null");
//            return;
//        }
//        //1. leave chatroom  not to lisener
//        MultiUserChat multiUserChat = new MultiUserChat(connection, jid);
//        multiUserChat.removeParticipantStatusListener(participantStatusListener);
//        //2.leave chatroom
//        String fromID = LoginUtil.getUserId() + "@" + Setting.CHAT_SERVICE_HOST;
//        Presence presence = new Presence(Presence.Type.unavailable);
//        presence.setFrom(fromID);
//        presence.setTo(jid);
//        presence.setPacketID(UUID.randomUUID().toString());
//        PacketExtension pe = new PacketExtension() {
//            @Override
//            public CharSequence toXML() {
//                return "<leave>leave</leave>";
//            }
//
//            @Override
//            public String getNamespace() {
//                return "";
//            }
//
//            @Override
//            public String getElementName() {
//                return "leave";
//            }
//        };
//        presence.addExtension(pe);
//        try {
//            getXmppConnext().sendPacket(presence);
//        } catch (SmackException.NotConnectedException e) {
//            e.printStackTrace();
//        }
//
//        Log.v(TAG, "leaveMucRoom success");
//    }
//
//    /**
//     * 进入聊天室
//     *
//     * @param jid
//     */
//    public void joinMucRoom(String jid) {
//        try {
//            XMPPConnection connection = getXmppConnext();
//            if (connection == null) {
//                LogUtilBase.LogD(TAG, "connect is null");
//                return;
//            }
//            MultiUserChat muc = new MultiUserChat(getXmppConnext(), jid);
//            // 创建聊天室,进入房间后的nickname(昵称)
//            if (!muc.isJoined()) {
//                muc.join(LoginUtil.getUserId());
//            }
//            muc.addParticipantStatusListener(participantStatusListener);
//            muc.addMessageListener(packetListener);
//            Log.v(TAG, "join MucRoom success");
//        } catch (XMPPException e) {
//            e.printStackTrace();
//        } catch (SmackException.NotConnectedException e) {
//            e.printStackTrace();
//        } catch (SmackException.NoResponseException e) {
//            e.printStackTrace();
//        }
//    }
//
//
//    /**
//     * 初始化房间列表
//     *
//     * @param jid
//     */
//    public List<MutiRoomEntity> init(String jid) {
//        List<MutiRoomEntity> mutiRoomEntities = new ArrayList<MutiRoomEntity>();
//        // 获得与XMPPConnection相关的ServiceDiscoveryManager
//        ServiceDiscoveryManager discoManager = ServiceDiscoveryManager
//                .getInstanceFor(getXmppConnext());
//        // 获得指定XMPP实体的项目
//        // 这个例子获得与在线目录服务相关的项目
//        DiscoverItems discoItems;
//        try {
//            discoItems = discoManager.discoverItems(jid);
//            // 获得被查询的XMPP实体的要查看的项目
//            List<DiscoverItems.Item> its = discoItems.getItems();
//            // 显示远端XMPP实体的项目
//            for (DiscoverItems.Item item : its) {
//                MutiRoomEntity roomEntity = new MutiRoomEntity();
//                MultiUserChat muc = new MultiUserChat(getXmppConnext(), item.getEntityID());
//                //roomEntity.multiUserChat = muc;
//                RoomInfo roomInfo = muc.getRoomInfo(getXmppConnext(), item.getEntityID());
//                roomEntity.OccupantsCount = String.valueOf(roomInfo.getOccupantsCount());
//                roomEntity.NaturalName = item.getName();
//                roomEntity.RoomUrl = item.getEntityID();
//                try {
//                    JSONObject jsonObject = new JSONObject(roomInfo.getDescription());
//                    roomEntity.Address = jsonObject.optString("City");
//                    roomEntity.IsHot = jsonObject.optInt("IsHot");
//                } catch (JSONException e) {
//                    e.printStackTrace();
//                }
//                mutiRoomEntities.add(roomEntity);
//            }
//        } catch (XMPPException e) {
//            e.printStackTrace();
//        } catch (SmackException.NotConnectedException e) {
//            e.printStackTrace();
//        } catch (SmackException.NoResponseException e) {
//            e.printStackTrace();
//        }
//        return mutiRoomEntities;
//    }
//
//    /**
//     * 加入并获取聊天列表
//     *
//     * @param entityRoomID
//     * @return
//     */
//    public void joinMUCGetMember(String entityRoomID) {
//        XMPPConnection xmppConnection = getXmppConnext();
//        if (xmppConnection == null)
//            return;
//        MultiUserChat muc = new MultiUserChat(xmppConnection, entityRoomID);
//        try {
//            if (!muc.isJoined()) //是否加入过
//                muc.join(LoginUtil.getUserId());
//            muc.addParticipantStatusListener(participantStatusListener);
//        } catch (SmackException.NoResponseException e) {
//            e.printStackTrace();
//        } catch (XMPPException.XMPPErrorException e) {
//            e.printStackTrace();
//        } catch (SmackException.NotConnectedException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 获取聊天室的所有成员
//     */
//    public String getAllMember(final MultiUserChat muc) {
//        Log.i("members", "获取聊天室的所有成员");
//        try {
//            Thread.sleep(100);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        StringBuilder sb = new StringBuilder();
//        List<String> list = muc.getOccupants();
//        if (list.size() == 0)
//            return LoginUtil.getUserId(); //返回自己的头像
//        for (String name : list) {
//            name = name.substring(name.indexOf("/") + 1);
//            sb.append(name + "|");
//        }
//        return (String) sb.toString().subSequence(0, sb.length() - 1);
//    }
//
//    ParticipantStatusListener participantStatusListener = new ParticipantStatusListener() {
//        @Override
//        public void adminGranted(String arg0) {
//            Log.i(TAG, "授予管理员权限" + arg0);
//        }
//
//        @Override
//        public void adminRevoked(String arg0) {
//            Log.i(TAG, "移除管理员权限" + arg0);
//        }
//
//        @Override
//        public void banned(String arg0, String arg1, String arg2) {
//            Log.i(TAG, "禁止加入房间（拉黑，不知道怎么理解，呵呵）" + arg0);
//        }
//
//        @Override
//        public void joined(String arg0) {
//            Log.i(TAG, "执行了joined方法:" + arg0 + "加入了房间");
////            // 更新成员
//            HeaderEntity headerEntity = new HeaderEntity();
//            String roomid = arg0.split("/")[0];
//            String userid = arg0.split("/")[1];
//            headerEntity.UserID = userid;
//            VCard vCard = XmppUserManager.getInstance().getUserVcard(userid + "@" + Setting.CHAT_SERVICE_HOST);
//            if (vCard != null) {
//                headerEntity.ImageUrl = vCard.getField("AVATAR") == null ? "" : vCard.getField("AVATAR");
//                headerEntity.Nickname = vCard.getField("NICKNAME");
//            }
//            Handler handler = MyApplication.getInstance().getMucUserState();
//            if (handler != null) {
//                Message msg = Message.obtain();
//                msg.what = Const.ENTER_CHAT_ROOM;
//                Bundle bundle = new Bundle();
//                bundle.putSerializable("headerEntity", headerEntity);
//                msg.setData(bundle);
//                handler.sendMessageDelayed(msg, 500);
//            }
//        }
//
//        @Override
//        public void kicked(String arg0, String arg1, String arg2) {
//        }
//
//        @Override
//        public void left(String arg0) {
//            String lefter = arg0.substring(arg0.indexOf("/") + 1);
//            Log.i(TAG, "执行了left方法:" + lefter + "离开的房间");
//            HeaderEntity headerEntity = new HeaderEntity();
//            String roomid = arg0.split("/")[0];
//            String userid = arg0.split("/")[1];
//            headerEntity.UserID = userid;
//            VCard vCard = XmppUserManager.getInstance().getUserVcard(userid + "@" + Setting.CHAT_SERVICE_HOST);
//            if (vCard != null) {
//                headerEntity.ImageUrl = vCard.getField("AVATAR") == null ? "" : vCard.getField("AVATAR");
//                headerEntity.Nickname = vCard.getField("NICKNAME");
//            }
//            Handler handler = MyApplication.getInstance().getMucUserState();
//            if (handler != null) {
//                Message msg = Message.obtain();
//                msg.what = Const.EXIT_CHAT_ROOM;
//                Bundle bundle = new Bundle();
//                bundle.putSerializable("headerEntity", headerEntity);
//                msg.setData(bundle);
//                handler.sendMessage(msg);
//            }
//        }
//
//        @Override
//        public void membershipGranted(String arg0) {
//            Log.i(TAG, "授予成员权限" + arg0);
//        }
//
//        @Override
//        public void membershipRevoked(String arg0) {
//            Log.i(TAG, "成员权限被移除" + arg0);
//        }
//
//        @Override
//        public void moderatorGranted(String arg0) {
//            Log.i(TAG, "授予主持人权限" + arg0);
//        }
//
//        @Override
//        public void moderatorRevoked(String arg0) {
//            Log.i(TAG, "移除主持人权限" + arg0);
//        }
//
//        @Override
//        public void nicknameChanged(String arg0, String arg1) {
//            Log.i(TAG, "昵称改变了" + arg0);
//        }
//
//        @Override
//        public void ownershipGranted(String arg0) {
//            Log.i(TAG, "授予所有者权限" + arg0);
//        }
//
//        @Override
//        public void ownershipRevoked(String arg0) {
//            Log.i(TAG, "移除所有者权限" + arg0);
//        }
//
//        @Override
//        public void voiceGranted(String arg0) {
//            Log.i(TAG, "给" + arg0 + "授权发言");
//        }
//
//        @Override
//        public void voiceRevoked(String arg0) {
//            Log.i(TAG, "禁止" + arg0 + "发言");
//        }
//    };
//
//
//    PacketListener packetListener = new PacketListener() {
//        @Override
//        public void processPacket(Packet packet) throws SmackException.NotConnectedException {
////            ChatRoomPacketExtension chatRoomPacketExtension =(ChatRoomPacketExtension) packet.getExtension(ChatRoomPacketExtension.SUB_ELEMENT_NAME, ChatRoomPacketExtension.NAMESPACE);
////            //聊天室的监听
////            Log.d(TAG, packet.toXML().toString());
//
//        }
//    };
//
//
//}
